home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / T-TPUG Old Monthly Disks / (c)tu.d64 / ponzo tutor-5.c (.txt) < prev    next >
Commodore BASIC  |  2007-02-04  |  17KB  |  403 lines

  1. 0 REM" PONZO*83*WATERLOO
  2. 1 [143]"
  3. 10 POKE53281,15:POKE53280,12:PRINT"[144]"
  4. 11 PRINT"[147]              C64 TUTOR-5
  5. 12 [153]"ORTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTAN^"
  6. 13 [153]"(null) THE ADC'S OF 6510 MACHINE LANGUAGE WAIT (null)":MS$[178]" WELCOME! "
  7. 14 [153]"/TANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANEXPSTOP"
  8. 30 [141]60000:[141]63100:[141]63000
  9. 31 [153]"LOADTHE MWAITICROPWAITROCESSOR UWAITNIT (MPU)"
  10. 32 [153]"IN THE C64 IS THE 6510WAIT."
  11. 33 [153]"HE (SHE?) WILL OBEY YOUR COMMANDS"
  12. 34 [153]"IF YOU CAN SPEAK THE RIGHT LANGUAGE"
  13. 35 [153]"...AND THAT'S  MACHINE LANGUAGEWAIT."
  14. 36 [153]"WE'LL LEARN SOME MACHINE LANGUAGE"
  15. 37 [153]"IN THIS TUTORIAL."
  16. 38 [153]"BUT LET'S LET THE 6510WAIT TELL IT..."
  17. 39 [141]63000
  18. 40 [153]"LOADSPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(THE 6510WAITSPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC("
  19. 45 [153]"(null)WE'VE GOT A NUMBER OF INTERNAL"
  20. 50 [153]"'REGISTERS' WHICH HOLD 8-BIT BINARY"
  21. 60 [153]"NUMBERS(BYTES) FROM $00 TO $FF (IN HEX)."
  22. 65 [153]"(null)WE CALL THEM 'A' AND 'X' AND 'Y'."
  23. 66 [153]"(WE HAVE A FEW MORE..BUT WAIT..)"
  24. 70 [153]"(null)YOU MAY LOAD THEM WITH NUMBERS"
  25. 80 [153]"AND PERFORM ADDITION,SUBTRACTION,"
  26. 90 [153]"TESTS FOR ZERO , > , < ETC.ETC."
  27. 100 [153]"(null)LET'S GO THROUGH SOME OF THESE 6510WAIT"
  28. 110 [153]"COMMANDS...":[141]63000
  29. 120 [153]"LOAD"A$X$Y$
  30. 130 [153]SD$"HERE ARE A FEW OF THE COMMANDS"
  31. 140 [153]"IN MY REPERTOIRE:"
  32. 150 [141]63200
  33. 160 [153]"LDA #$F3"
  34. 170 [153]"LWAITOADWAIT THE AWAITCCUMULATOR WITH  THE"
  35. 180 [153]"NUMBER F3 IN HEX..#$F3"
  36. 190 [153]"THIS IS AN IMMEDIATEWAIT LOAD."
  37. 200 MS$[178]"  A=#$F3  ":[141]63300:N$[178]"11110011":[141]40110:[141]63200
  38. 210 [153]"LDX #$AB":MS$[178]"  X=#$AB  ":[141]63300
  39. 215 N$[178]"10101011":[141]40130:[141]63200
  40. 220 [153]"LDY #$DD":MS$[178]"  Y=#$DD  ":[141]63300:N$[178]"11011101":[141]40140
  41. 230 [141]63200:[153]"TAX":[153]"TWAITRANSFER CONTENTS OF AWAIT TO XWAIT."
  42. 235 MS$[178]"   X=A    ":[141]63300:[141]41130:[141]63200
  43. 240 [153]"TYA":[153]"TWAITRANSFER CONTENTS OF YWAIT TO AWAIT.":MS$[178]"   A=Y   "
  44. 245 [141]63300:[141]41410:[141]63200
  45. 250 [153]"..AND THERE'S TXAWAIT AND TAYWAIT."
  46. 270 [153]"HERE ARE SOME MOREWAIT:":[141]63200
  47. 280 [153]"INXWAIT":[153]"INWAITCREMENT THE XWAIT-REGISTER BY 1.":MS$[178]"  X=X+1   "
  48. 290 [141]63300:N$[178]"10101100":[141]40130:[141]63200
  49. 300 [153]"DEXWAIT":[153]"DEWAITCREMENT THE XWAIT-REGISTER BY 1.":MS$[178]"  X=X-1  "
  50. 310 [141]63300:N$[178]"10101011":[141]40130:[141]63200
  51. 320 [153]"AND THERE'S INYWAIT AND DEYWAIT.":[141]63200
  52. 330 [153]M$:N$[178]"10110101":PP[178]0:[141]40160:[153]ML$"$1234":PP[178]20
  53. 340 [153]SD$"INC $1234WAIT":[153]"INCWAITREMENTS MEMORY LOCATION $1234"
  54. 350 MS$[178]"  M=M+1  ":[141]63300:N$[178]"10110110":[141]40160:[141]63200
  55. 360 [153]"DEC $1234WAIT":[153]"DECWAITREMENTS MEMORY LOCATION $1234"
  56. 370 MS$[178]"   M=M-1  ":[141]63300:N$[178]"10110101":[141]40160:[141]63200
  57. 380 [153]"ASLWAIT":[153]"AWAITRITHMETIC SWAITHIFT LWAITEFT"
  58. 390 [153]"ALL BITS OF THE AWAIT-REGISTER MOVE"
  59. 400 [153]"MOVE LEFT. A '0' COMES INTO THE 'LSB'"
  60. 410 [153]"AND THE 'MSB' DROPS INTO THE 'CARRY'."
  61. 420 [153]"(null)LSB=LEAST SIGNIFICANT BIT"
  62. 430 [153]"(null)MSB=MOST SIGNIFICANT BIT"
  63. 435 MS$[178]"  A=2*A   ":[141]63300
  64. 440 [153]C$:[151]C,49:N$[178]"10111010":PP[178]500:[141]40098:[141]63200:PP[178]20
  65. 450 [153]CC$:[151]C,32
  66. 460 [153]SD$"SECWAIT":[153]"SEWAITT THE CWAITARRY BIT."
  67. 470 [153]CR$:MS$[178]"  CARRY=1 ":[141]63300:[151]C,49:[141]63200
  68. 480 [153]SD$"CLCWAIT":[153]"CLWAITEAR CWAITARRY BIT.":MS$[178]"  CARRY=0 "
  69. 490 [141]63300:[153]CR$:[151]C,48:[141]63200:[153]CC$
  70. 500 [153]"STA $1234WAIT":[153]"STWAITORE THE AWAIT-REGISTER"
  71. 510 [153]"IN MEMORY LOCATION $1234":MS$[178]"   M=A    ":[141]63300
  72. 520 N$[178]"10111010":[141]41160:[141]63000
  73. 600 [153]"LOADTHAT'S ENOUGH. LET'S CLEAR THE SCREEN."
  74. 610 [153]"LDA #$20  _LOAD A WITH #$20='SPACE'."
  75. 620 [153]"STA $0400 RIGHT$":[153]"STA $0401 (null)_FILLS SCREEN"
  76. 630 [153]"STA $0402 (null)_MEMORY WITH #$20."
  77. 640 [153]"--- ----- .----------------":[153]"STA $07FF (null)_HENCE CLEAR SCREEN"
  78. 650 [153]"BUT WE CLEARLY NEED SOMETHING LIKE:":[153]"LDA #$20"
  79. 660 [153]"FOR X=0 TO #$3FF":[153]"STA $0400+X":[153]"NEXT X":[141]63000
  80. 670 [153]"LOADORCMDCMDFREFRE":[153]"BEGIN LDA #$20 _NOTE STATEMENT LABEL"
  81. 680 [153]"      LDX #$00":[153]"LOOP  STA $0400,X _INDEXED ADDRESSING"
  82. 690 [153]"   ^  INX":[153]"   (null)  ?CHECK FOR X=#$3FF?"
  83. 695 [153]"   /TAN IF NOT,GOTO 'LOOP'"
  84. 700 [153]"WE HAVE COMPAREWAIT & BRANCHWAIT INSTRUCTIONS!"
  85. 710 [153]"WHAT WE NEED ABOVE IS:":[153]"CWAITOMPWAITARE XWAIT TO #$3FF"
  86. 720 [153]"& BWAITRANCH IF NWAITOT EWAITQUAL..TO 'LOOP'":[141]63010
  87. 730 [153]"BEGIN LDA #$20   WAIT                   "
  88. 740 [153]"      LDX #$00   ":[153]"LOOP  STA $0400,X"
  89. 750 [153]"   ^  INX        ":[153]"   (null)  CPX #$3FF  WAIT                      "
  90. 760 [153]"   /TAN BNE LOOP   WAIT               ":[141]63200
  91. 770 [153]"NOTECMDCMDCMDCMDFREFREFREFREON:WE WILL NEVER STAWAIT IN $07FFWAIT"
  92. 780 [153]"IN THE ABOVE PROGRAM...SO...":[141]63010
  93. 790 [153]"   (null)  CPX #$400  ":[141]63200
  94. 800 [153]"ALSO, WE CAN CPX #$NWAIT ONLY IF N LIES"
  95. 810 [153]"IN THE RANGE $00 TO $FF."
  96. 820 [153]"SO WE CHANGE THE CODE TO:":[141]63010
  97. 830 [153]"LOADBEGIN LDA #$20   WAIT"
  98. 840 [153]"      LDX #$00   ":[153]"LOOP  STA $0400,X"
  99. 850 [153]"      STA $0500,X"
  100. 860 [153]"      STA $0600,X"
  101. 870 [153]"      STA $0700,X"
  102. 880 [153]"      INX        ":[153]"      CPX #$FF   WAIT"
  103. 890 [153]"      BNE LOOP   WAIT":[141]63000
  104. 900 [153]SD$"";:[129]T[178]1[164]10:[153]CL$:[130]:[153]SD$"";
  105. 910 [153]"OR, WE CAN SIMPLIFY THIS A LITTLE BY"
  106. 920 [153]"COUNTING DOWNWAIT FROM X=$FF TO $00":[141]63010
  107. 930 [153]"BEGIN LDA #$20   WAIT"
  108. 940 [153]"      LDX #$FF   ":[153]"LOOP  STA $0400,X"
  109. 950 [153]"      STA $0500,X"
  110. 960 [153]"      STA $0600,X"
  111. 970 [153]"      STA $0700,X"
  112. 980 [153]"      DEX        "
  113. 990 [153]"      BNE LOOP   WAIT":[153]"                   ":[141]63000
  114. 991 [153]SD$"";:[129]T[178]1[164]10:[153]CL$:[130]:[153]SD$"";
  115. 995 [153]"HOW CAN WE BNEWAIT WHEN WE DON'T DO ANY"
  116. 996 [153]"COMPAREWAIT?":[141]63000
  117. 1000 [153]"LOADYOU SEE, BNEWAIT REALLY CHECKS TO SEE"
  118. 1010 [153]"IF '0' IS THE RESULT OF AN ARITHMETIC"
  119. 1020 [153]"OPERATION..INCLUDING A COMPAREWAIT."
  120. 1030 [153]"IN THE PAIR OF INSTRUCTIONS:"
  121. 1040 [153]"CPX #$FF":[153]"BNE LOOP":[153]"WE SUBTRACT #$FF FROM THE"
  122. 1050 [153]"VALUE OF X AND BRANCHWAIT TO LOOP IF"
  123. 1060 [153]"THE RESULT IS NOT ZERO!":[141]63000
  124. 1070 [153]"LOADINX     ":[153]"BNE LOOP"
  125. 1080 [153]"WE BRANCH TO LOOP IF THE RESULT OF"
  126. 1090 [153]"INCREMENTING X IS NOTWAIT ZERO.":[153]"FREFREFRE"
  127. 1100 [153]"DEC $1234":[153]"BNE LOOP "
  128. 1110 [153]"HERE WE BRANCH TO LOOP IF"
  129. 1120 [153]"DECREMENTING $1234 IS NOT ZERO.":[153]"FREFREFRE"
  130. 1130 [153]"NOTEWAIT: CPXWAIT  INVOLVES A SUBTRACTION"
  131. 1140 [153]"(TO CHECK FOR ZERO RESULT)"
  132. 1150 [153]"BUT IT DOES NOTCMDCMDCMDFREFREFREON CHANGE ANY REGISTERS!":[141]63000
  133. 1160 [153]"LOADLET'S RVSWAIT THE SCREEN."
  134. 1170 [153]"THIS REQUIRES LOOKING AT EVERY SCREEN"
  135. 1180 [153]"MEMORY LOCATION AND CHECKING THE MSBWAIT."
  136. 1190 [153]"IF IT'S 1WAIT THEN CHANGE IT TO 0WAIT."
  137. 1200 [153]"IF IT'S 0WAIT THEN CHANGE IT TO 1WAIT."
  138. 1300 [153]"(THE MSB DETERMINES IF THE CHARACTER"
  139. 1310 [153]"IS IN RVS-FIELD)!"
  140. 1320 [153]"WE'LL:":[153]"LDA $0400,X":[153]"EOR #$80   WAIT __???":[153]"STA $0400,X"
  141. 1330 [153]"EORWAIT IS AN EWAITXCLUSIVE ORWAIT!":[141]63000
  142. 1340 [153]"LOADIF AWAIT CONTAINS 10110101WAIT (AFTER LDAWAIT)"
  143. 1350 [153]"THEN EOR #$80WAIT DOES AN EXCLUSIVE-OR"
  144. 1360 [153]"WITH 10000000WAIT ($80 IN HEX)"
  145. 1370 [153]"AND GIVES 00110101WAIT..VERY NICE!"
  146. 1380 [153]"OUR PROGRAM MIGHT GO:"
  147. 1390 [153]"BEGIN LDX #$FF   ":[153]"LOOP  LDA $0400,X"
  148. 1400 [153]"      EOR #$80   ":[153]"      STA $0400,X"
  149. 1410 [153]"      LDA $0500,X":[153]"      EOR #$80   "
  150. 1420 [153]"      STA $0500,X":[153]"ETC. ETC..UNTIL..WAIT"
  151. 1430 [153]"      STA $0700,X"
  152. 1440 [153]"      DEX        ":[153]"      BNE LOOP   ":[141]63000
  153. 1450 [153]"LOADIT'S CLEAR THAT THIS WILL NOT DO IF"
  154. 1460 [153]"WE WANT TO GO FROM $0400 TO $0500 TO"
  155. 1470 [153]"..TO $0N00,INSTEAD OF JUST TO $0700."
  156. 1480 [153]"WE NEED A LOOP-WITHIN-A-LOOP"
  157. 1490 [153]"FOR LARGE N...SOMETHING LIKE:"
  158. 1500 [153]"     M=$0400":[153]"     X=N     _N INSTEAD OF 3"
  159. 1510 [153]"LP1  Y=#$FF":[153]"LP2  LDA M+Y":[153]"     EOR #$80"
  160. 1511 [153]"     STA M+Y":[153]"     Y=Y-1"
  161. 1512 [153]"     IF Y<>0 GOTO LP2 ":[153]"     M=M+$100":[153]"     X=X-1"
  162. 1513 [153]"     IFX<>0 GOTO LP1 ":[141]63000
  163. 1514 [153]""[163]23)"_WON'T DO Y=0WAIT!"
  164. 1515 [153]""[163]23)"_WON'T DO X=0WAIT!!":[141]63000
  165. 1516 [153]"";:[129]I[178]1[164]10:[153]CL$:[130]:[153]"WE'LL CHANGEWAIT IT TO:"
  166. 1517 [141]63010:[153]"     M=$0400":[153]"     X=N"                    "
  167. 1518 PRINT"LP1  Y=#$00          ":PRINT"LP2  LDA M+Y":PRINT"     EOR #$80"
  168. 1519 PRINT"     STA M+Y":PRINT"     Y=Y-1"
  169. 1520 PRINT"     IF Y<>0 GOTO LP2 ":PRINT"     M=M+$100":PRINT"     X=X-1"
  170. 1521 PRINT"     IFX>=0 GOTO LP1 [146]":GOSUB63000:PRINT"";
  171. 1522 PRINT"WE WORK ON M+00 FIRST,THEN Y=Y-1[146]"
  172. 1523 PRINT"WILL CHANGE Y=00 TO Y=FF(!) AND WE'LL"
  173. 1524 PRINT"CONTINUE WITH M+FF THEN M+FE..TO M+01"
  174. 1525 PRINT"AND WE STOP THE Y-LOOP THERE!"
  175. 1526 PRINT"THE X-LOOP STARTS WITH X=N AND EACH"
  176. 1527 PRINT"X=X-1[146] CHANGES X TO N-1,N-2,..2,1,0 THEN[146]"
  177. 1528 PRINT"ONE MORE X=X-1[146] CHANGES X TO FF(!) WHICH"
  178. 1529 PRINT"IS NEGATIVE[146](!) AND WE STOP THE X-LOOP!"
  179. 1530 PRINT"NOTE[146]:THE 6510 REGISTERS CAN HOLD  #'S"
  180. 1531 PRINT"FROM $00 TO $FF.IF WE HAVE 00[146] AND"
  181. 1532 PRINT"DECREMENT[146],IT CHANGES TO FF[146]..AND FF+1[146]=00[146]"
  182. 1533 PRINT"FINALLY,MSB=1[146] SIGNIFIES A NEGATIVE NO.[146]!";:GOSUB63000
  183. 1540 PRINT"[147]LET'S TRY SOMETHING LIKE:"
  184. 1550 PRINT"BEGIN LDA #$0400 [146]_??*!#$0400 TOO BIG!!"
  185. 1555 PRINT"      STA $B0    [146]_$B0 NOW HAS #$0400"
  186. 1560 PRINT"      LDX #$03   ":PRINT"LP1   LDY #$00   "
  187. 1570 PRINT"LP2   LDA ($B0),Y[146]_ INDIRECT INDEXED?":PRINT"      EOR #$80   "
  188. 1580 PRINT"      STA ($B0),Y[146]_ INDIRECT INDEXED!":PRINT"      DEY        "
  189. 1590 PRINT"      BNE LP2    ":PRINT"      INC $B0 BY #$100[146]_??*!!HOW??"
  190. 1600 PRINT"      DEX        ":PRINT"      BPL LP1    [146]_BRANCH ON PLUS!!"
  191. 1610 PRINT"LDA ($B0),Y[146] TAKES THE CONTENTS OF"
  192. 1620 PRINT"MEMORY LOC'N $B0, ADDS Y, AND THIS[157][157][157][157][184][184][184][184]"
  193. 1625 PRINT"GIVES THE ADDRESS OF THE BYTE WHICH "
  194. 1626 PRINT"GETS LOADED INTO 'A'!!":GOSUB63000
  195. 1630 PRINT"[147]THERE ARE SOME NEW IDEAS..AND PROBLEMS!"
  196. 1635 PRINT"BUT FIRST LET'S AGREE THAT WE'LL"
  197. 1636 PRINT"USE $B0 TO REFER TO THE MEMORY LOC'N"
  198. 1637 PRINT"AND ($B0) TO REFER TO THE CONTENTS"
  199. 1638 PRINT"OF MEMORY LOCATION $B0."
  200. 1640 PRINT"LET'S LOOK AT ADDRESSING MODES[146]:":GOSUB63000
  201. 1650 PRINT"[147]BASIC"TAB(20)"ASSEMBLER"
  202. 1655 PRINT"[184][184][184][184][184]"TAB(20)"[184][184][184][184][184][184][184][184][184]"
  203. 1660 PRINT"A=5[146]"TAB(20)"LDA #$05[146]"
  204. 1670 PRINT"[209]IMMEDIATE MODE. THE ACCUMULATOR"
  205. 1680 PRINT"IS LOADED WITH THE # 5."
  206. 1690 PRINT"A=M(5)[146]"TAB(20)"LDA $05[146]"
  207. 1700 PRINT"[209]ABSOLUTE ADDRESSING. 'A' IS"
  208. 1710 PRINT"LOADED WITH THE CONTENTS OF"
  209. 1720 PRINT"MEMORY LOCATION 5."
  210. 1730 PRINT"A=M(5+X)[146]"TAB(20)"LDA $0005,X"
  211. 1740 PRINT"[209]ABSOLUTE INDEXED[146]. THE CONTENTS"
  212. 1750 PRINT"OF LOC'N (5+X) ARE LOADED INTO 'A'."
  213. 1760 PRINT"A=M(M(5+X))[146]"TAB(20)"LDA ($0005,X)"
  214. 1770 PRINT"[209]INDEXED INDIRECT[146]. THE CONTENTS"
  215. 1780 PRINT"OF LOC'N (5+X) GIVE THE ADDRESS OF"
  216. 1790 PRINT"THE BYTE TO BE LOADED INTO 'A'.":GOSUB63000
  217. 1800 PRINT"[147]THEN THERE'S OUR FRIEND:"
  218. 1810 PRINT"A=M(M(5)+Y)[146]"TAB(20)"LDA ($05),Y[146]"
  219. 1820 PRINT"[209]INDIRECT INDEXED[146]. FIRST, THE CONTENTS"
  220. 1830 PRINT"OF LOC'N 5 ARE EXTRACTED.THEN 'Y'"
  221. 1840 PRINT"IS ADDED AND THE RESULT GIVES THE"
  222. 1850 PRINT"ADDRESS OF THE BYTE LOADED INTO 'A'.":GOSUB63000
  223. 1860 PRINT"[147][209]INDIRECT[146] MEANS WE GO TO A MEMORY LOC'N"
  224. 1870 PRINT"TO GET THE ADDRESS OF THE BYTE TO BE"
  225. 1880 PRINT"LOADED INTO THE ACCUMULATOR."
  226. 1890 PRINT"[209]INDEXED[146] MEANS WE ADD THE CONTENTS"
  227. 1900 PRINT"OF A 6510[146] REGISTER TO AN ADDRESS."
  228. 1910 PRINT"[209]IF WE INDEX[146] THEN INDIRECT[146] IT'S"
  229. 1920 PRINT"INDEXED INDIRECT[146]..AS IN LDA ($0400,X)"
  230. 1930 PRINT"[209]IF WE INDIRECT[146] THEN INDEX[146] IT'S"
  231. 1940 PRINT"INDIRECT INDEXED[146]..AS IN LDA ($B0),Y":GOSUB63000
  232. 1950 MS$="CLEAR?!*$&":GOSUB63100:GOSUB63000
  233. 1960 PRINT"[147]LET'S EXPLAIN ABOUT MEMORY[146]."
  234. 1970 PRINT"6510[146] INSTRUCTIONS ARE STORED IN MEMORY"
  235. 1980 PRINT"AS 1- OR 2- OR 3- HEX BYTES."
  236. 1990 PRINT"INX[146]=E8[146] IS ONE BYTE LONG
  237. 2000 [153]"LDA #$05WAIT=AD 05WAIT IS TWO BYTES"
  238. 2010 [153]"LDA $1234,XWAIT=BD 34 12WAIT IS THREE BYTES."
  239. 2020 [153]"               ^^ ^^"
  240. 2030 [153]"IN GENERAL, 2-BYTE ADDRESSES ARE"
  241. 2040 [153]"STORED IN MEMORY IN REVERSE ORDER:"
  242. 2050 [153]"LO-BYTEWAIT THEN HI-BYTEWAIT."
  243. 2060 [153]"SO IF YOU HAVE:"
  244. 2070 [153]"LDA ($B0),YWAIT=B1 CAWAIT THE 6510 WILL"
  245. 2080 [153]"GET FROM $B0 THE LO-BYTEWAIT OF THE"
  246. 2090 [153]"ADDRESS,AND FROM $B1 THE HI-BYTEWAIT!"
  247. 2100 [153]"(null)BE SURE TO PUT BOTH BYTES IN $B0/$B1"
  248. 2110 [153]"BEFORE LDA ($B0),YWAIT!!":[141]63000
  249. 2120 [153]"LOADLET'S GET BACK TO:"
  250. 2130 [153]"BEGIN LDA #$0400 WAIT_??*!#$0400 TOO BIG!!"
  251. 2140 [153]"      STA $B0    WAIT_$B0 NOW HAS #$0400"
  252. 2150 [153]"      LDX #$03   ":[153]"LP1   LDY #$00   "
  253. 2160 [153]"LP2   LDA ($B0),YWAIT_ INDIRECT INDEXED?":[153]"      EOR #$80   "
  254. 2170 [153]"      STA ($B0),YWAIT_ INDIRECT INDEXED!":[153]"      DEY        "
  255. 2180 [153]"      BNE LP2    ":[153]"      INC $B0 BY #$100WAIT_??*!!HOW??"
  256. 2190 [153]"      DEX        ":[153]"      BPL LP1    WAIT_BRANCH ON PLUS!!"
  257. 2200 [153]"WE NOW MUST PUT $0400 INTO $B0/$B1"
  258. 2210 [153]"WITH LDA #$00WAIT STA $B0WAIT LDA #$04WAIT STA $B1WAIT."
  259. 2220 [153]"ALSO INC $B0 BY #$100WAIT IS CHANGED TO:"
  260. 2230 [153]"INC $B1WAIT... WE NEED ONLY INCWAIT THE"
  261. 2240 [153]"HI-BYTE BY '1'!":[141]63000
  262. 2250 [153]"LOADWE'LL CHANGE OUR PROGRAM TO:"
  263. 2260 [153]"BEGIN LDA #$00   WAIT":[153]"      STA $B0    "
  264. 2270 [153]"      LDA #$04   ":[153]"      STA $B1    "
  265. 2280 [153]"      LDX #$03   ":[153]"LP1   LDY #$00   "
  266. 2290 [153]"LP2   LDA ($B0),YWAIT":[153]"      EOR #$80   "
  267. 2300 [153]"      STA ($B0),YWAIT":[153]"      DEY        "
  268. 2310 [153]"      BNE LP2    ":[153]"      INC $B1    "
  269. 2320 [153]"      DEX        ":[153]"      BPL LP1    WAIT":[141]63000
  270. 2330 [153]"WE NEEDN'T LDY #$00WAIT EACH"
  271. 2340 [153]"TIME WE BPL LP1":[153]"Y=0 ALREADY SO:":[141]63010
  272. 2350 [153]"     ":[153]"LOOP":[153]"LOOP"
  273. 2355 [153]"LOOP":[141]63000
  274. 2360 [153]"":[129]I[178]1[164]6:[153]CL$:[130]
  275. 2370 [153]"NOTE THAT LDX #$03WAIT CAN"
  276. 2380 [153]"BE CHANGED TO ANYTHING FROM"
  277. 2390 [153]"LDX #$01WAIT TO LDX #$80WAIT.":[141]63000
  278. 2400 [153]"":[129]I[178]1[164]6:[153]CL$:[130]
  279. 2410 [153]"FOR LDX #$00WAIT WE'LL X-LOOP ONCE ANYWAY!"
  280. 2420 [153]"FOR LDX #$81WAIT,OR HIGHER,DEXWAIT"
  281. 2430 [153]"WILL LEAVE 'MSB'=1 IN THE X-REGISTER"
  282. 2440 [153]"AND X<0 WILL RESULT AND BPLWAIT WILL"
  283. 2450 [153]"NOTWAIT TAKE US BACK TO 'LOOP'!":[141]63000
  284. 2460 [153]"":[129]I[178]1[164]6:[153]CL$:[130]
  285. 2470 [153]"NOTE THAT ($B1) WILL NOT"
  286. 2480 [153]"OVERFLOWWAIT AFTER A NUMBER OF INC $B1WAIT"
  287. 2490 [153]"INSTR'NS. AFTER ALL,MEMORY ONLY GOES"
  288. 2500 [153]"TO $FFFF, SO, UNLESS YOU GOOF"
  289. 2510 [153]"($B1)<=FF WILL ALWAYS BE TRUE!":[141]63000
  290. 2520 [153]"LOADNOTE THAT INCREMENTING THE ADDRESS"
  291. 2530 [153]"IN $B0/$B1 BY $0100 ONLY REQUIRES"
  292. 2540 [153]"INC $B1WAIT. IF YOU WANT TO INCREMENT"
  293. 2550 [153]"BY $0001 YOU CAN DO IT THIS WAY:"
  294. 2560 [153]"     ------- "
  295. 2570 [153]"     INC $B0 ":[153]"     BNE NEXT":[153]"     INC $B1 "
  296. 2580 [153]"NEXT ------- "
  297. 2590 [153]"THIS ADDS '1' TO ($B0).IF IT DOESN'T"
  298. 2600 [153]"OVERFLOWWAIT FROM FF TO 00 WE CONTINUE"
  299. 2610 [153]"WITH THE 'NEXT' INTRUCTION."
  300. 2620 [153]"IF IT DOES OVERFLOW TO 00WAIT"
  301. 2630 [153]"THE BNE NEXTWAIT WILL NOT TAKE US TO"
  302. 2640 [153]"'NEXT', AND WE ADD '1' TO THE HI-BYTE"
  303. 2650 [153]"WITH INC $B1WAIT.":[141]63000
  304. 2660 [153]"LOADIF YOU WANT TO INCREMENT BY OTHER THAN"
  305. 2670 [153]"$0001 OR $0100 (INC $B0WAIT OR INC $B1WAIT)"
  306. 2680 [153]"THEN YOU NEED TO ADDWAIT THE INCREMENT."
  307. 2685 [153]"SUPPOSE WE WANT TO ADD $1F:"
  308. 2690 [153]"LDA $B0 WAIT_GET LO-BYTE"
  309. 2700 [153]"ADC #$1FWAIT_ADD #$1F TO LO-BYTE"
  310. 2710 [153]"STA $B0 WAIT_PUT IT BACK"
  311. 2720 [153]"LDA $B1 WAIT_GET HI-BYTE"
  312. 2730 [153]"ADC #$00WAIT_ADD ZERO(?!)":[153]"STA $B1 WAIT_PUT IT BACK"
  313. 2740 [153]"YOU SEE..ADDING #$1F MIGHT JUST CAUSE"
  314. 2750 [153]"THE CONTENTS OF $B0 TO OVERFLOWWAIT WHICH"
  315. 2760 [153]"CAUSES CARRYWAIT=1. SO WE ADD THE CARRY"
  316. 2770 [153]"TO ($B1) WITH LDA $B1WAIT & ADC #$00"
  317. 2780 [153]"NOTECMDCMDCMDCMDFREFREFREFREON:ADCWAIT MEANS ADWAITD WITH CWAITARRY.":[141]63000
  318. 2790 [153]"":[129]I[178]1[164]8:[153]CL$:[130]:[153]""
  319. 2800 [153]"OF COURSE THE CARRYWAIT MAY BE 1WAIT WHEN"
  320. 2810 [153]"THE ABOVE PIECE OF CODE STARTS, SO"
  321. 2820 [153]"WE MUST ALWAYSCMDCMDCMDCMDCMDCMDFREFREFREFREFREFREON CLCWAIT BEFORE AN ADCWAIT!":[141]63010
  322. 2830 [153]"CLC     ":[141]63000
  323. 2840 [153]"LOADIF YOU WANT TO SUBTRACTWAIT #$1FWAIT YOU:"
  324. 2850 [153]"LDA $B0 ":[153]"SBC #$1FWAIT_SUBTRACT $1F":[153]"STA $B0 "
  325. 2860 [153]"LDA $B1 ":[153]"SBC #$00WAIT_SUBTRACT $00!!":[153]"STA $B1 "
  326. 2870 [153]"NOTECMDCMDCMDCMDFREFREFREFREON:SBCWAIT MEANS SWAITUBWAITTRACT WITH CWAITARRY."
  327. 2880 [153]"HOWEVER, WITH SBCWAIT YOU MUST HAVE"
  328. 2890 [153]"CARRY=1 TO START WITH!!":MS$[178]"*?UGH!*?!!":[141]63000:[141]63100
  329. 2900 [141]63010:[153]"SEC     ":[141]63000
  330. 3000 [153]"LOAD":MS$[178]"AU REVOIR!WAIT":[141]63100:[153]"":[128]
  331. 9999 [137]9999
  332. 40098 [151]A(0),32:[129]TT[178]1[164]PP:[130]:[129]I[178]0[164]6:[151]A(I[170]1),32
  333. 40099 [151]A(I),[197]([202](N$,I[170]1,1))[170]48:[129]TT[178]1[164]PP:[130]:[130]:[151]A(7),48:[142]
  334. 40110 [129]I[178]0[164]7:[151]A(I),160:[129]TT[178]1[164]PP:[130]
  335. 40111 [151]A(I),[197]([202](N$,I[170]1,1))[170]48:[130]:[142]
  336. 40120 [129]I[178]0[164]7:[151]P(I),160:[129]TT[178]1[164]PP:[130]
  337. 40121 [151]P(I),[197]([202](N$,I[170]1,1))[170]48:[130]:[142]
  338. 40130 [129]I[178]0[164]7:[151]X(I),160:[129]TT[178]1[164]PP:[130]
  339. 40131 [151]X(I),[197]([202](N$,I[170]1,1))[170]48:[130]:[142]
  340. 40140 [129]I[178]0[164]7:[151]Y(I),160:[129]TT[178]1[164]PP:[130]
  341. 40141 [151]Y(I),[197]([202](N$,I[170]1,1))[170]48:[130]:[142]
  342. 40160 [129]I[178]0[164]7:[151]M(I),160:[129]TT[178]1[164]PP:[130]
  343. 40161 [151]M(I),[197]([202](N$,I[170]1,1))[170]48:[130]:[142]
  344. 41120 [129]I[178]0[164]7:[151]P(I),160:[129]TT[178]1[164]PP:[130]
  345. 41121 [151]P(I),[194](A(I)):[130]:[142]
  346. 41130 [129]I[178]0[164]7:[151]X(I),160:[129]TT[178]1[164]PP:[130]
  347. 41131 [151]X(I),[194](A(I)):[130]:[142]
  348. 41140 [129]I[178]0[164]7:[151]Y(I),160:[129]TT[178]1[164]PP:[130]
  349. 41141 [151]Y(I),[194](A(I)):[130]:[142]
  350. 41160 [129]I[178]0[164]7:[151]M(I),160:[129]TT[178]1[164]PP:[130]
  351. 41161 [151]M(I),[194](A(I)):[130]:[142]
  352. 41340 [129]I[178]0[164]7:[151]A(I),160:[129]TT[178]1[164]PP:[130]
  353. 41341 [151]A(I),[194](X(I)):[130]:[142]
  354. 41360 [129]I[178]0[164]7:[151]M(I),160:[129]TT[178]1[164]PP:[130]
  355. 41361 [151]M(I),[194](X(I)):[130]:[142]
  356. 41410 [129]I[178]0[164]7:[151]A(I),160:[129]TT[178]1[164]PP:[130]
  357. 41411 [151]A(I),[194](Y(I)):[130]:[142]
  358. 41460 [129]I[178]0[164]7:[151]M(I),160:[129]TT[178]1[164]PP:[130]
  359. 41461 [151]M(I),[194](Y(I)):[130]:[142]
  360. 60000 R$[178]"ORTAN=TAN=TAN=TAN=TAN=TAN=TAN=TAN^CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)CLOSE(null)CLOSE(null)CLOSE(null)CLOSE(null)CLOSE(null)CLOSE(null)CLOSE(null)CLOSE(null)"
  361. 60001 R$[178]R$[170]"CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD/TAN>TAN>TAN>TAN>TAN>TAN>TAN>TANEXP"
  362. 60002 A$[178]" AWAITON"[170]R$:P$[178]"PWAITON"[170]R$
  363. 60003 X$[178]" XWAITON"[170]R$:Y$[178]"YWAITON"[170]R$
  364. 60004 M$[178]"MWAITON"[170]R$
  365. 60005 CR$[178]"ORTAN^CMDCMDCMD(null)(null)CMDCMDCMD/TANEXP"
  366. 60006 CC$[178]" AWAIT(null)CMDCMDCMD CMD CMD CMD CMD   CMDCMDCMD   CMDCMDCMD   ON            "
  367. 60007 WD[178]40:CRT[178]1024:[153][199](142)
  368. 60008 [129]I[178]0[164]7:A(I)[178]CRT[170]WD[170]3[170]2[172]I:P(I)[178]A(I)[170]20:X(I)[178]A(I)[170]3[172]WD:Y(I)[178]X(I)[170]20
  369. 60009 M(I)[178]Y(I)[170]3[172]WD:[130]:C[178]CRT[170]7[172]WD[170]1
  370. 60010 SD$[178]"":CL$[178]"":[129]I[178]1[164]WD[171]2:CL$[178]CL$[170]" ":[130]
  371. 60011 BT$[178]"":[129]I[178]1[164]24:BT$[178]BT$[170]"":[130]
  372. 60012 C$[178]CR$[170]"ORTAN<CMDCMDCMD(null)CMD(null)CMD(null)CMD(null)CMD-_CARRY BIT"
  373. 60019 ML$[178]""
  374. 60020 PP[178]20
  375. 60051 BT$[178]"":[129]I[178]1[164]24:BT$[178]BT$[170]"":[130]
  376. 60052 PT$[178]"ORTANTANTANTANTANTANTANTANTANTAN^CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)(null)CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD/=TANTANTANTANTANTANTANTAN=EXP"
  377. 60053 PT$[178]PT$[170]"CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB((null)CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDFN============THEN"
  378. 60054 PT$[178]PT$[170]"CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)(null)TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB((null)(null)ONONONONCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD"
  379. 60055 PT$[178]BT$[170]"ONONONONONON"[170]PT$[170]"STOP"
  380. 60056 ML$[178]""
  381. 60057 WD[178]40:CRT[178]1024:[153][199](142)
  382. 60058 W2[178]WD[173]2:W3[178]WD[171]1:W1$[178][202]([196](WD),2):
  383. 60059 W2$[178][202]([196](W2),2):W3$[178][202]([196](W3),2)
  384. 60100 [142]
  385. 63000 [153]BT$CL$;
  386. 63001 [153]BT$"RETURNWAIT TO CONTINUE";
  387. 63002 [161]Z$:[139]Z$[179][177]""[167]63002
  388. 63003 [161]Z$:[139]Z$[178]""[167]63003
  389. 63004 [142]
  390. 63010 [153]BT$CL$;
  391. 63011 [153]BT$"SPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(RETURN TO SEE IT HAPPENWAITSPC(SPC(SPC(SPC(SPC(SPC(SPC(SPC(";
  392. 63012 [161]Z$:[139]Z$[179][177]""[167]63012
  393. 63013 [161]Z$:[139]Z$[178]""[167]63013
  394. 63014 [142]
  395. 63100 [129]T[178]1[164]5:[153]PT$MS$;
  396. 63101 [153]PT$"          ";
  397. 63102 [153]PT$MS$;:[130]
  398. 63103 [142]
  399. 63200 [141]63000
  400. 63201 [153]SD$;:[129]T[178]1[164]10:[153]CL$:[130]:[153]SD$;:[142]
  401. 63300 [141]63100:[141]63010:[142]
  402. 63999 [141]60000:[153]"LOAD":[137]1630
  403.